"""
AI合同审核系统
主程序入口文件
"""

import streamlit as st
import os
import sys
from pathlib import Path

# 添加项目根目录到Python路径
project_root = Path(__file__).parent
sys.path.append(str(project_root))

from services.contract_analyzer import ContractAnalyzer
from services.document_processor import DocumentProcessor
from services.report_generator import ReportGenerator
from utils.file_handler import FileHandler
from config import Config

def main():
    """主程序入口"""
    st.set_page_config(
        page_title="AI合同审核系统",
        page_icon="📋",
        layout="wide",
        initial_sidebar_state="expanded"
    )

    st.title("🤖 AI合同审核系统")
    st.markdown("---")

    # 侧边栏配置
    with st.sidebar:
        st.header("⚙️ 系统配置")

        # AI模型选择
        model_type = st.selectbox(
            "选择AI模型",
            ["通义千问 Qwen-Max", "OpenAI GPT-4", "OpenAI GPT-3.5", "本地模型"],
            index=0
        )

        # API密钥配置
        if model_type.startswith("OpenAI"):
            api_key = st.text_input("OpenAI API Key", type="password")
            if api_key:
                os.environ["OPENAI_API_KEY"] = api_key
        elif model_type.startswith("通义千问"):
            api_key = st.text_input("DashScope API Key", type="password")
            if api_key:
                os.environ["DASHSCOPE_API_KEY"] = api_key

        st.markdown("---")
        st.header("📊 审核选项")

        # 审核类型选择
        review_types = st.multiselect(
            "选择审核类型",
            ["风险识别", "合规检查", "条款分析", "法律建议"],
            default=["风险识别", "合规检查"]
        )

        # 审核严格程度
        strictness = st.slider("审核严格程度", 1, 5, 3)

    # 主界面
    col1, col2 = st.columns([2, 1])

    with col1:
        st.header("📄 文档上传")

        # 文件上传
        uploaded_file = st.file_uploader(
            "上传合同文档",
            type=['pdf', 'docx', 'doc', 'txt'],
            help="支持PDF、Word、TXT格式"
        )

        if uploaded_file is not None:
            # 显示文件信息
            st.success(f"已上传文件: {uploaded_file.name}")
            st.info(f"文件大小: {uploaded_file.size / 1024:.2f} KB")

            # 处理文档按钮
            if st.button("🔍 开始审核", type="primary"):
                with st.spinner("正在处理文档..."):
                    try:
                        # 初始化处理器
                        file_handler = FileHandler()
                        doc_processor = DocumentProcessor()
                        analyzer = ContractAnalyzer(model_type, strictness)
                        report_generator = ReportGenerator()

                        # 保存上传的文件
                        file_path = file_handler.save_uploaded_file(uploaded_file)

                        # 提取文档内容
                        content = doc_processor.extract_content(file_path)

                        # AI分析
                        analysis_result = analyzer.analyze_contract(
                            content, review_types
                        )

                        # 生成报告
                        report = report_generator.generate_report(
                            uploaded_file.name, analysis_result
                        )

                        # 显示结果
                        st.success("✅ 审核完成!")

                        # 显示分析结果
                        display_analysis_results(analysis_result)

                        # 提供报告下载
                        st.download_button(
                            label="📥 下载审核报告",
                            data=report,
                            file_name=f"contract_review_{uploaded_file.name}.md",
                            mime="text/markdown"
                        )

                    except Exception as e:
                        st.error(f"处理过程中出现错误: {str(e)}")

    with col2:
        st.header("📋 使用说明")
        st.markdown("""
        ### 🚀 推荐使用通义千问模型
        - 🇨🇳 **中文理解优势**: 对中文合同理解更准确
        - 💰 **成本优势**: 相比GPT-4更具性价比
        - ⚖️ **本土化**: 熟悉中国法律环境

        ### 操作步骤：
        1. 在左侧选择"通义千问 Qwen-Max"模型
        2. 输入DashScope API密钥
        3. 选择需要的审核类型
        4. 上传合同文档
        5. 点击"开始审核"按钮
        6. 查看分析结果并下载报告

        ### 支持的文件格式：
        - PDF文档 (.pdf)
        - Word文档 (.docx, .doc)
        - 文本文件 (.txt)

        ### 审核功能：
        - **风险识别**: 识别合同中的潜在风险
        - **合规检查**: 检查法律法规合规性
        - **条款分析**: 分析重要条款内容
        - **法律建议**: 提供专业法律建议

        ### 📚 快速开始：
        - 查看 [通义千问快速指南](QUICKSTART_QWEN.md)
        - 获取API密钥：[DashScope控制台](https://dashscope.aliyun.com/)
        """)

def display_analysis_results(analysis_result):
    """显示分析结果"""
    st.header("📊 审核结果")

    # 总体评分
    if 'overall_score' in analysis_result:
        score = analysis_result['overall_score']
        col1, col2, col3 = st.columns(3)

        with col1:
            st.metric("总体评分", f"{score}/100")

        with col2:
            risk_level = "高" if score < 60 else "中" if score < 80 else "低"
            st.metric("风险等级", risk_level)

        with col3:
            st.metric("审核项目", len(analysis_result.get('details', [])))

    # 详细结果
    if 'details' in analysis_result:
        for category, details in analysis_result['details'].items():
            with st.expander(f"📋 {category}", expanded=True):
                if isinstance(details, dict):
                    for key, value in details.items():
                        st.write(f"**{key}**: {value}")
                else:
                    st.write(details)

    # 风险提示
    if 'risks' in analysis_result and analysis_result['risks']:
        st.error("⚠️ 发现的风险项目:")
        for risk in analysis_result['risks']:
            st.write(f"- {risk}")

    # 建议
    if 'recommendations' in analysis_result and analysis_result['recommendations']:
        st.info("💡 改进建议:")
        for rec in analysis_result['recommendations']:
            st.write(f"- {rec}")

if __name__ == "__main__":
    main()
